我正在处理一个问题,但没有获得预期的输出。
字符串数组“ 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);
}
}
}
}
答案 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();
}