从列表中查找leastCommon字符串

时间:2017-07-14 07:25:52

标签: c# string

我有一个字符串列表:

{"\\\\eZREUApp01.EU.abc.com\\eZR_Data\\ALSTOM GIS\\Review_Files",
"\\\\eZREUApp01.EU.abc.com\\eZR_Data\\ALSTOM GIS\\ADP_Processes",
"\\\\EZRSEARCH01.eu.abc.com\\road\\EZR_ALSTOM GIS_7\\",
"\\\\eZREUApp01.EU.abc.com\\eZR_Data\\ALSTOM GIS\\Production_Files\\009",
"\\\\EZRSEARCH01.EU.abc.com\\table\\EZR_Alstom_GIS_7\\",
"\\\\eZREUApp01.EU.abc.com\\eZR_Data\\ALSTOM GIS\\Production_Files"}

现在我希望c#中的输出为:

{"\\\\eZREUApp01.EU.abc.com\\eZR_Data\\ALSTOM GIS"
"\\\\EZRSEARCH01.eu.abc.com\\road\\EZR_ALSTOM GIS_7"
"\\\\EZRSEARCH01.EU.abc.com\\table\\EZR_Alstom_GIS_7 "}

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

以下是如何做到这一点的示例。 您必须执行以下步骤:
1.拆分字符串并遍历结果数组以获得子进入的最小数量 2.遍历拆分的数组并在第一步数量的元素中查找并将它们连接起来。

我使用HashSet,以便结果集不同。

using System;
using System.Collections.Generic;
using System.Linq;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string[] arr ={"\\\\eZREUApp01.EU.abc.com\\eZR_Data\\ALSTOM GIS\\Review_Files",
                            "\\\\eZREUApp01.EU.abc.com\\eZR_Data\\ALSTOM GIS\\ADP_Processes",
                            "\\\\EZRSEARCH01.eu.abc.com\\road\\EZR_ALSTOM GIS_7\\",
                            "\\\\eZREUApp01.EU.abc.com\\eZR_Data\\ALSTOM GIS\\Production_Files\\009",
                            "\\\\EZRSEARCH01.EU.abc.com\\table\\EZR_Alstom_GIS_7\\",
                            "\\\\eZREUApp01.EU.abc.com\\eZR_Data\\ALSTOM GIS\\Production_Files"};

            string[][] newArr = new string[arr.Length][];

            for (int i = 0; i < newArr.GetLength(0); i++)
            {
                newArr[i] = arr[i].Split(new char[] { '\\' },StringSplitOptions.RemoveEmptyEntries);
            }

            var min = newArr.Min(x => x.Length); 

            HashSet<string> resultSet = new HashSet<string>();
            foreach(var a in newArr)
            {
                resultSet.Add("\\\\" + a.Take(min).Aggregate((x,y)=>x+"\\"+y));
            }
            foreach(var a in resultSet)
            {
                Console.WriteLine(a);
            }
        }
    }
}