从列表中删除重复的对

时间:2019-04-16 10:59:15

标签: java collections

我正在处理一个问题,但没有获得预期的输出。

字符串数组“ F1”具有Facebook用户及其朋友关联的名称。

例如,如果我们编写:U1,U2,则表示U1是U2的朋友。这也意味着U2是U1的朋友。 编写一个程序,该程序将读取“ F1”并删除重复项,并将所有唯一对写入“ F2”。 但是,在删除重复项之前

输入字符串=> [“ U1,U2”,“ U3,U4”,“ U2,U1”,“ U1,U5”]

输出字符串=> [“ U1,U2”,“ U1,U5”,“ U3,U4”]

public static void main(String args[]) {

    List test = new ArrayList();
    List<String> list = new ArrayList();
    list.add("U1,U2");
    list.add("U3,U4");
    list.add("U2,U1");
    list.add("U1,U5");
    Collections.sort(list);

    for (String str : list) {
        String i1 = str.substring(0, 2);
        String i2 = str.substring(3, 5);
         System.out.println(i2);
         if (!i1.equals(i2)) {
         test.add(str);
         }
        if (!(str.contains(i1) && str.contains(i2)) || !(str.contains(i2) && str.contains(i1))) {
            System.out.println(str);
        }


    }

}

}

7 个答案:

答案 0 :(得分:1)

这是完成的过程;)

class Program
{
    static void Main(string[] args)
    {
        List<string> test = new List<String>();
        List<String> list = new List<String>();
        List<String> list1 = new List<String>();
        List<String> outputList = new List<String>();
        list.Add("MARY,JOE");
        list.Add("A,B");
        list.Add("B, A");
        list.Add("3");
        list.Add("3");
        list.Add("3,3");
        list.Add("3,3");
        var aa = compareFriends(list);
        Console.ReadLine();
    }

    public static List<string> compareFriends(List<string> allfrndsList)
    {
        var frndsList  = allfrndsList.Distinct().ToList();
        var outputList = new List<string>(frndsList);
        var listCount = frndsList.Count();
        var startIndex = 1;

        foreach (var friend in frndsList)
        {
            friend.Replace(" ","");
            var str = friend.Split(',');
            var i1 = str.FirstOrDefault();
            var i2 = str.LastOrDefault();
            for (var index = startIndex; index < listCount; index++)
            {
                var innerStr = frndsList[index].Replace(" ","").Split(',');
                var temp1 = innerStr.FirstOrDefault();
                var temp2 = innerStr.LastOrDefault();
                if (innerStr.Length != 1 && str.Length!=1)
                {
                    if (i1.Equals(temp2) && i2.Equals(temp1))
                    {
                        outputList.Remove(friend);
                    }
                }
            }
            startIndex++;
        }
        return outputList;
    }
}

答案 1 :(得分:0)

每对都做一个键,第一个值小于第二个值。 (“ U1,U2”和“ U2,U2”都将产生“ U1,U2”)。将这些密钥添加到集合中(集合可为您删除重复项)。最后,您将拥有一组独特的朋友关系。

Set<String> f2=new HashSet<>();

for (String str : list) {
    String[] users=str.split(",");
    String i1 = users[0];
    String i2 = users[1];
    String key=i1.compareTo(i2)>0?i2+","+i1:i1+","+i2;
    f2.add(key);
}
System.out.println(f2);

答案 2 :(得分:0)

    List test = new ArrayList();
    List<String> list = new ArrayList();
    list.add("JOE,MARY");
    list.add("A,B");
    Set<String> f2 = new HashSet<>();

    for (String str : list) {
        String[] users = str.split(",");
        String i1 = users[0];
        String i2 = users[1];
        String key = i1.compareTo(i2) > 0 ? i2 + "," + i1 : i1 + "," + i2;
        f2.add(key);
    }
    Iterator val = f2.iterator();
    while (val.hasNext()) {
        test.add(val.next());
    }
    Collections.sort(test);
    System.out.println("test" + test);

答案 3 :(得分:0)

在C#中:

class Program
{
    static void Main(string[] args)
    {
        List<string> list1 = new List<string>();

        list1.Add("U1,U2");
        list1.Add("U3,U4");
        list1.Add("U2,U1");
        list1.Add("U1,U5");

        List<string> list2 = new List<string>();

        foreach (string s in list1)
        {
            var list3 = s.Split(',');
            Array.Sort(list3);
            list2.Add(list3.FirstOrDefault() + ',' + list3.LastOrDefault());

        }

        list2.Sort();
        var list4 = list2.Distinct().ToList();

        Console.WriteLine("Input string:");
        foreach (string s in list1)
            Console.WriteLine(s);

        Console.WriteLine("\nOutput string:");
        foreach (string s in list4)
            Console.WriteLine(s);
        Console.Read();
    }
}

答案 4 :(得分:0)

我们可以将其视为无向图 您必须删除重复的路径 由于它是无向的,因此“ U1,U2”和“ U2,U1”是同一路径 因此,如果路径U1,U2已经存在,则U2,U1是重复的,因此将其删除。

评论中的任何建议都会产生可行的解决方案

答案 5 :(得分:0)

In Python :


f1 = [("U1", "U2"), ("U3", "U4"), ("U1", "U5"), ("U2", "U1"), ("U3", "U4")]

nw_lst = []

f1 = list(set(filter(lambda x: x[0] != x[1], f1)))

for i in f1:
    val1 = int(i[0][1]) + int(i[1][1])
    for j in range(f1.index(i) + 1, len(f1)):
        val2 = int(f1[j][0][1]) + int(f1[j][1][1])
        if val1 == val2:
            nw_lst.append(f1[j])

f2 = set(f1).difference(set(nw_lst))

for i in f2:
    print(f"{i[0]} , {i[1]}")

答案 6 :(得分:-1)

Below is the answer to remove the duplicate pair from list using C#. 

protected void Page_Load(object sender, EventArgs e)
{            
   List<string> list = new List<string>();
   list.Add("U1,U2");
   list.Add("U3,U4");
   list.Add("U2,U1");
   list.Add("U1,U5");
   var result=compareFriends(list);
   foreach (string value in result)
   {
     Response.Write(value + "");
    }
}
public static List<string> compareFriends(List<string> frndsList)
{
  List<string> F2 = new List<string>();
  frndsList.Sort();
  foreach (string str in frndsList)
  {
     string s1 = str.Substring(0, 2);
     string s2 = str.Substring(3, 2);

     string key;
     if (s1.CompareTo(s2)>0)
     {
        key = s2 + "," + s1;
     }
     else
     {
        key = s1 + "," + s2;
     }
     F2.Add(key);

     }
     var result = F2.Distinct();            
     return result.ToList();
}