【问题标题】:Formatting List of String字符串格式化列表
【发布时间】:2020-11-21 22:50:40
【问题描述】:

我有一个字符串数组。我需要对列表进行排序并将每个字母的项目保存在一行中。在这之后,我需要找到最长的字符串。

我以低效的方式完成了第一部分,但我正在努力使其简洁。

List<string> fruits = new List<string>
               {
                "Pomme",
                "Apple",
                "Apricots",
                "Avocado",
                "Banana",
                "Blackberries",
                "Blackcurrant",
                "Blueberries",
                "Cherries",
                "Clementine",
                "Cranberries",
                "Custard-Apple",
                "Durian",
                "Elderberries",
                "Feijoa",
                "Figs",
                "Gooseberries",
                "Grapefruit",
                "Grapes",
                "Guava",
                "Breadfruit",
                "Cantaloupe",
                "Carambola",
                "Cherimoya",
                };
    
                fruits.Sort();
    
                List<string> sortedString = new List<string> { };
    
                foreach (var str in fruits)
                {
                    sortedString.Add(str);
                }
    
                //string A, B, C, D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S; 
                var A = "";
                var B = "";
                var C = "";
                var D = "";
                var E = "";
                var F = "";
                var G = "";
                
                foreach (var item in sortedString)
                {
                    if (item.StartsWith('A'))
                    {
                        A += item;
                    }
                    else if (item.StartsWith('B'))
                    {
                        B += item;
                    }
                    else if (item.StartsWith('C'))
                    {
                        C += item;
                    }
                    else if (item.StartsWith('D'))
                    {
                        D += item;
                    }
                    else if (item.StartsWith('E'))
                    {
                        E += item;
                    }
                    else if (item.StartsWith('F'))
                    {
                        F += item;
                    }
                    
                }

结果会像 -

AppleApricotsAvocado
BananaBlackberriesBlackcurrantBlueberriesBreadfruit
CantaloupeCarambolaCherimoyaCherriesClementineCranberriesCustard-Apple
Durian
Elderberries
FeijoaFigs
GooseberriesGrapefruitGrapesGuava

在此之后,我需要找到最长的行并在每个项目之间放置空格。如果没有有效的循环,代码会很乱。你能帮助我展示解决问题的正确方法吗?

【问题讨论】:

    标签: c# arrays string


    【解决方案1】:

    Sort() 方法已经对您的列表进行了排序,您无需将其分配给新列表。

    我解决您问题的建议是

    fruits.Sort();
    var result = fruits.GroupBy(f => f[0]);
    int[] lineslength = new int[result.Count()];
    int index = 0;
    foreach (var group in result)
    {
        foreach (var item in group)
        {
            lineslength[index] += item.Length;
            Console.Write(item + " ");
        }
        Console.WriteLine();
        index++;
    }
    int longestIndex = Array.FindIndex(lineslength, val => val.Equals(lineslength.Max()));
    Console.WriteLine(longestIndex);
    

    我使用 GroupBy 方法按字符串的第一个字母对字符串进行分组。然后当我显示字符串时,我还计算了它们的长度。使用 Array 类的静态 FindIndex 方法,我找到了包含数组最大值的索引,该索引对应于最大长度的行。所以索引零是第一行,一个是第二行等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      相关资源
      最近更新 更多