【问题标题】:Link an element of string Array to a decimal value将字符串数组的元素链接到十进制值
【发布时间】:2020-04-01 13:20:51
【问题描述】:

所以我有这个元素的字符串数组:

string[] words = { "My", "name", "is", "Jack" }; 

我希望这个数组中的每个元素都链接到一个特定的值(十进制)但是每次我按下一个按钮让这个元素出现(在文本中)让我们说在一个文本框或一个我希望能够按下的标签中第二个按钮,更新与元素链接的小数。每个元素都有自己的特定值(我们称之为权重)。我试过了:

decimal weight1 = 0; 
words[0] = Convert.ToString(weight1); 
label1.Text = Convert.ToString(words[0]);

但它所做的只是将值分配给元素(更改它),我不希望这样。我希望它们显示为文本但只链接元素而不更改它,并在背景上更新其链接值。

元素:

“我的”链接到weight1 元素“名称”链接到weight2name => weight3Jack => weight4

我该怎么做?

如果数组、类或接口无法做到这一点,我愿意接受其他建议...

【问题讨论】:

  • 你有没有想过使用枚举

标签: c# arrays forms


【解决方案1】:

听起来您只需要Dictionary<string, decimal>。使用关键字作为查找,然后您可以简单地引用它来始终提取相应的数值。

var lookup = new Dictionary<string, decimal>()
{
    { "My", 0.0m },
    { "name", 0.0m },
    { "is", 0.0m },
    { "Jack", 0.0m },
};

然后你可以随时按字更新:

lookup["My"] += 1;
lookup["name"] += 0.5;

或者,如果在事件处理程序中(例如 WinForms 按钮单击),那么无论按钮的文本是什么都可以驱动它:

lookup[(sender as Button).Text] += 1;

【讨论】:

    【解决方案2】:

    听起来您需要一个自定义类来定义您的架构。您应该定义一个如下所示的类,而不是字符串数组:

    public class WeightedWord
    {
          public WeightedWord(string word, decimal weight)
          {
               Word = word;
               Weight = weight;
          }
    
          public string Word { get; set; }
          public decimal Weight { get; set; }
    }
    

    然后,您将能够为每个单词分配单独的权重。

    您的数组将如下所示:

    WeightedWord[] weightedWords = { new WeightedWord("My", .1), 
                                     new WeightedWord("name", .2),
                                     new WeightedWord("is", .3),
                                     new WeightedWord("Jack", .4) }; 
    

    在您的按钮按下动作中,您可以访问要更新的特定对象。

    weightedWords[0].Weight = .7;
    

    【讨论】:

    • 考虑一个通用列表 而不是数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 2012-05-30
    • 2017-12-02
    • 2013-08-09
    • 2013-10-13
    • 2015-07-13
    相关资源
    最近更新 更多