【问题标题】:How to traverse a list of string items and insert another string item(s) based on certain conditions?如何遍历字符串项列表并根据某些条件插入另一个字符串项?
【发布时间】:2019-10-25 19:00:19
【问题描述】:

假设我在列表中有一个字符串项目列表,例如: “苹果”, “杏”, “香蕉”, “蓝莓”, “图”, “葡萄”……

如您所见,我们有一些 A 项目,一些 B 项目,然后我们跳过 C D 和 E,然后再拿起 F 和 G 项目。我需要帮助弄清楚如何遍历这个列表并在 A 项之前插入一个“A”,然后在 B 项之前插入一个“B”,依此类推......但重要的部分是即使没有 C、D , 还是 E 项我还需要插入“C”、“D”和“E”?所以当打印到屏幕上时,它看起来像这样......

  • “A”
  • “苹果”
  • “杏”
  • “B”
  • “香蕉”
  • “蓝莓”
  • “C”
  • “D”
  • “E”
  • “F”
  • “图”
  • “G”
  • “葡萄”

有没有办法用 vanilla C# 做到这一点?

【问题讨论】:

  • 你试过什么?什么具体不起作用?
  • 慢的方式就是把A到G插入到最后,然后对列表进行排序,不过估计你不满意吧?
  • "如何遍历这个列表和..." - 好吧,从遍历列表开始。你能做到吗?
  • 嗯,你想要的不是遍历列表,而是对列表进行排序。谷歌排序算法。编辑:List 有一个 Sort 方法

标签: c# sharepoint


【解决方案1】:

我会这样做:

string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
List<string> listOfWords = new List<string>
{
    "Appricot",
    "Apple",
    ...
};

foreach (string letter in letters)
{
    Console.WriteLine(letter);
    List<string> words = listOfWords.Where(word => word[0].ToUpper().Eqauls(letter)).ToList();
    words.ForEach(word => Console.WriteLine(word));
}

这将遍历letters 中的所有字母并将它们打印到控制台。

然后它将获取listOfWords 中以字母开头的所有单词并将它们打印出来。

希望这会有所帮助:)

【讨论】:

  • 你最终遍历listOfWords 的方式比你需要的方式要多。这意味着它不是很有效
  • @maccettura 你有什么建议吗?
【解决方案2】:

好的,这看起来很简单。

var yourList = new List<string>() { 
    "Apple", "Apricot", "Banana", "Blueberry", "Fig", "Grape"
};

yourList
  .AddRange("ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray().Select(x => x.ToString()).ToList());

yourList.Sort();

【讨论】:

    【解决方案3】:

    我相信这可以通过很多其他更好的方法来完成,但最简单的方法是-

    
    List<string> prods = new List<string>();
    
                prods.AddRange(new List<string>() {
                    "Apple",
                    "Apricot",
                    "Banana",
                    "Blueberry",
                    "Fig",
                    "Grape"
                });
    
                //Considering that the list is already sorted alphabetically
                //or you can use prods.Sort();
                List<string> newList = new List<string>();
    
                 string alphabets = "abcdefghijklmnopqrstuvwxyz";
                foreach(char a in alphabets)
                {
                    newList.Add(a.ToString());
                    foreach (var item in prods)
                    {
                        if (item.StartsWith(a.ToString()) || item.StartsWith(a.ToString().ToUpper()))
                        {
                            Console.WriteLine($"adding {item} to  newlist");
                            newList.Add(item);
                        }
                    }
                }
                foreach (var item in newList)
                {
                    Console.WriteLine(item);
                }
    
    
                Console.ReadKey();
    

    请让我知道它对您的效果如何。

    【讨论】:

    • 为什么要用逗号分隔字母表?
    • 是的,不需要更新相同的。感谢您的注意。
    猜你喜欢
    • 1970-01-01
    • 2018-12-23
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    相关资源
    最近更新 更多