【问题标题】:C# creating an object using an array as the basis?C#以数组为基础创建对象?
【发布时间】:2020-12-14 18:43:24
【问题描述】:

这更多是一个是否可行的问题。

我有一个输入框,输入框有6个项目,这是一个组成数组的示例字符串:

星期一、星期二、四月、二月、明天,42 岁

这些词可以改变,但它们的顺序很重要。它们由制表符分隔。

我想要这个数组中的第 1 个、第 3 个和第 6 个单词。我想将它们放入一个对象中-如果可能的话,但其他来源的其他项目以特定顺序放入该对象中-这样我就可以参考该对象,这样我就不必写太久了每次我需要输出这 3 项时的代码段。

我当前的代码很笨拙,我正在寻找更好的解决方案。

供参考我当前的代码:

string phrase = value.Text;
string[] words = phrase.Split('\t');

string Word1 = words[1];
string Word2 = words[3];
string Word3 = words[6];

this.Output.Text = Word1 + '\t';
this.Output.Text += TextBox1.Text + '\t';
this.Output.Text += Word2 + '\t';
this.Output.Text += TextBox2.Text + '\t';
this.Output.Text += Word3;

此代码有效,但我开始使用更大的数组,需要更大的输出,我发现我需要多次引用相同的输出。

想象一下上面的代码运行到 Word12,从 30 个数组中添加来自 6 个文本框的信息,并且必须在程序的不同位置创建 15 次输出。此外,您可以看到代码的长度不再有意义。

如果我可以创建一个包含所有这些信息的对象,我可以创建一次,然后在需要时随时引用它。

任何关于如何进行的见解或指导都非常感激。

【问题讨论】:

  • 对象是否属于哪个模式,或者它们都是手动的?
  • 这是您第三次尝试提出这个问题?值是如何进入输入框的?为什么要一个输入框?退后一步,看看大局。忽略UI问题,先写你真正要处理的代码。然后将这些概念映射到 UI 上。
  • 您为什么要尝试只存储某些输入词而不是其他词?是否需要对这些词进行任何验证,例如前两个应该总是一周中的几天吗?如果你能给出你正在尝试做的事情的高水平,那就太好了。
  • 奥斯汀,是的,我认为下面的两个答案已经告诉我我需要去哪里,我在搜索中的索引上没有找到任何东西。杰里米,是的,因为虽然我收到的帮助确实使我的代码以前工作,但它们导致了上述情况(我将其简化,以便人们可以遵循)。 sr28,不,那是一个随机集 - 我认为索引听起来是一个很好的前进方式,因为它们始终位于位置 1、3 和 6。

标签: c# arrays object


【解决方案1】:

根据我的理解,您正在寻找以下解决方案。如果我错过了什么,请告诉我。

  1. 首先,您可以将 value.Text 存储到字符串列表中,方法是用 '\t' 分割。
  2. 创建一个数组来存储您要为其挑选单词的索引。
  3. 根据存储的索引,您可以选择单词并将其存储在最终的单词列表中。
  4. 创建一个数组来存储动态文本框文本。
  5. 在这些存储的文本框文本数组上循环,并在最终单词列表中的备用位置插入。
  6. 最后加入以“\t”分隔的词表并显示为输出。

下面是代码:

string finalOutput = string.Empty;
        List<string> wordsList = new List<string>();
        string phrase = value.Text;// "Monday\tTuesday\tApril\tFebruary\tTomorrow\t42";
        string[] words = phrase.Split('\t');
        List<int> wordsIndexes = new List<int> { 1, 3, 6 }; //this is based on ur requirment
        List<string> textBoxesText = new List<string>() { TextBox1.Text, TextBox2.Text };
        wordsIndexes.ForEach(i => wordsList.Add(words[i-1]));

        int insertAtIndex = 1;
        for (int i = 0; i < textBoxesText.Count; i++)
        {
            if (wordsList.Count >= insertAtIndex)
            {
                wordsList.Insert(insertAtIndex, textBoxesText[i]);
                insertAtIndex += 2;
            }
        }

        finalOutput = string.Join('\t', wordsList);

【讨论】:

  • 嗨 Vikas,这真的很好,我认为这绝对是我改善生活所需要的。奇怪的是,我最初的问题是“Grouby 使用数组中的字数”,因为我还没有遇到索引,而且在我所有的搜索中,我从来没有遇到过它。因此,感谢您意识到我需要什么并提供我可以从中学习的代码。非常感谢。
【解决方案2】:

不确定我是否理解正确,但我认为您可以使用列表并在其中添加单词,使用如下索引列表:

string phrase = value.Text;
string[] words = phrase.Split('\t');
List<int> indexes = new List<int> { 1, 3, 6 }; //you can add more indexes here...
List<string> wordsList = new List<string>();
indexes.Foreach(i => wordsList.add(words[i]));

通过此实现,您可以在列表中找到所需的所有单词,并且您可以轻松添加更多单词,只需添加或删除您想要的任何索引。您可以在需要时参考该列表。

【讨论】:

    猜你喜欢
    • 2019-05-02
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2019-12-22
    相关资源
    最近更新 更多