首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不再使用"If / Then";字典使用?

不再使用"If / Then";字典使用?
EN

Stack Overflow用户
提问于 2009-01-24 05:00:06
回答 5查看 332关注 0票数 1

我正在写一段代码,它需要大量的if/then语句才能工作。为了消除逐行编写if/then语句的需要,我可以使用字典或列表吗?如果是这样的话,有人能给我介绍一个好的web资源或者展示一个他们以前做过的实例吗?

编辑

澄清:我有六个输入,每个输入都是带有一组选择的组合框。下面是输入和选择的详细信息。

(安培) 1:1 - 1:12 (12种不同选择)

(电缆尺寸) 2:1 - 2:13 (13个不同选项)选择第一个输入时,此列表中的某些项目将被排除。

(电缆类型) 3:1 - 3:2 (2种不同选择)

(温度等级) 4:1 - 4:3 (3种不同选择)

(系统类型) 5:1 - 5:2 (2种不同选择)

(线管类型) 6:1 - 6:2 (2种不同选择)

从上面的输入将产生两个输出,它们将出现在两个文本框中。

(电缆数量) 7:1 - 7:16 (16种不同输出)

(导管尺寸) 8:1 - 8:8 (8种不同输出)

我希望这有助于而不是阻碍。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-01-24 06:26:14

看起来您正在尝试将6个输入的每个组合(12 * 13 *2*3*2*2可能性)映射到(16 * 8)个输出中的一个。如果是这样的话,您仍然有很多类型要做-但是移动到一个集合将允许您轻松地将映射外部化。我猜这可能最适合数据库表:

代码语言:javascript
运行
复制
Amps | CableSize | CableType | TempRating | SystemType | ConduitType | CableQty | ConduitSize

您将在6个输入列上放置一个主键,然后只需执行一个简单的SELECT:

代码语言:javascript
运行
复制
SELECT CableQty, ConduitSize 
FROM Table 
WHERE Amps = @amps AND CableSize = @cableSize...etc

要在快速而肮脏的代码中做到这一点,数组应该是有效的:

代码语言:javascript
运行
复制
const int AMPS = 0; const int CABLE_SIZE = 1; const int TEMP_RATING = 2; // etc.
var mappings = new Dictionary<int[], int[]>(12 * 13 * 2 * 3 * 2 * 2);
mappings.Add(
   new int[] { 1, 1, 1, 1, 1, 1 }, // inputs
   new int[] { 1, 2 } //outputs
);
// repeat...a lot

var outputs = mappings.First(inputs => {
   inputs[AMPS] == myAmps
   && inputs[CABLE_SIZE] == myCableSize
   && inputs[TEMP_RATING] == myTempRating
   && // etc
});

它不会节省你太多的输入-尽管你可以使用for循环或类似的东西来填充映射,如果有某种逻辑的话-但它比6页的if语句更具可读性(我可能会关闭区域或分部类加载映射)。

票数 2
EN

Stack Overflow用户

发布于 2009-01-24 05:08:22

可能想要给出一些关于if/the语句的用法。如果您只是从一个键中获取一个值,那么,是的,字典可能会起作用。

代码语言:javascript
运行
复制
Dictionary<string,string> map = new Dictionary<string,string>();

... populate the map with keys...

然后使用它..。

代码语言:javascript
运行
复制
string value = "default value";
if (map.ContainsKey(key))
{
   value = map[key];
}
票数 2
EN

Stack Overflow用户

发布于 2009-01-24 06:20:07

实际上,我建议构建一个对象模型来存储您的设置。这将使您有机会封装您的逻辑,了解哪些选项在哪些时间可用。另一个好处是您的Amp1控件可以绑定到SettingsContainer.Amp1.Value,或者以任何方式结束。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/475532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档