Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用'时仍然会得到重复的字符串;独特的';_C#_Linq - Fatal编程技术网

C# 使用'时仍然会得到重复的字符串;独特的';

C# 使用'时仍然会得到重复的字符串;独特的';,c#,linq,C#,Linq,嗯,我在做一个学校项目。我知道问家庭作业问题是不专业的,但我真的不确定这部分(在课堂上没有讲过)。所以我在这里问了最后一个问题。所以情况是必须对两个列表进行比较,然后打印出相似的元素 当前代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LessonXEx4 { class St

嗯,我在做一个学校项目。我知道问家庭作业问题是不专业的,但我真的不确定这部分(在课堂上没有讲过)。所以我在这里问了最后一个问题。所以情况是必须对两个列表进行比较,然后打印出相似的元素

当前代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LessonXEx4
{
    class Student
    {
        public string strName;
        public float fltGPA;
        public Student(string x, float y)
        {
            strName = x;
            fltGPA = y;
        }
    }

    class Program
    {
        static void DisplayStudents(List<Student> Studentx)
        {
            foreach(Student C in Studentx)
            {
                Console.WriteLine("Student name: " + C.strName + "\nGPA: " + C.fltGPA);
            }
        }
        static List<Student> AddStudentInfo()
        {
            List<Student> Studlist = new List<Student>();
            Student ObjStd;
            string Per = "Y";   
            while (Per == "Y")
            {
                Console.WriteLine("Enter student Name:");
                string N = Console.ReadLine();

                Console.WriteLine("Enter you GPA: ");
                float G = float.Parse(Console.ReadLine());

                ObjStd = new Student(N, G);
                Studlist.Add(ObjStd);

                Console.WriteLine("Do you want to continue: ");
                string Perx = Console.ReadLine();
                Per = Perx;
            }
            return Studlist;
        }
        static void Main(string[] args)
        {
            List<Student> studentlist1 = new List<Student>();
            List<Student> studentlist2 = new List<Student>();
            Console.WriteLine("Group 1:\n");
            studentlist1 = AddStudentInfo();
            Console.WriteLine("\n\nGroup 2:\n");
            studentlist2 = AddStudentInfo();
            Console.WriteLine("\n\nGroup 1:\n");
            DisplayStudents(studentlist1);
            Console.WriteLine("\n\nGroup 2:\n");
            DisplayStudents(studentlist2);
            foreach (Student Fx in studentlist1)
            {
                foreach (Student fX in studentlist2) 
                {
                    if (Fx.fltGPA == fX.fltGPA)
                    {
                        List<String> Nam = new List<string>();
                        Nam.Add(fX.strName);
                        Nam.Add(Fx.strName);
                        Nam.Distinct().ToArray();
                        Console.WriteLine("\n" + fX.fltGPA);
                        Nam.ForEach(item => Console.WriteLine(item));
                    }
                }
            }
                        Console.ReadLine();
        }
    }
}
虽然我在
Nam
列表中尝试了
.Distinct()
,但它仍然在重复名称。我不想重复这些。我所期望的是:

12
qw
we
er
as
sd
df
或者更好:

Student(s) with GPA of 12 are: qw, we, er, as, sd, df
差不多吧。
非常感谢您的帮助。

谢谢您说这是一个家庭作业问题。 你就快到了。 你写的地方:

Nam.Distinct().ToArray();
Nam.ForEach(item => Console.WriteLine(item));
就是你有点小问题的地方
Distinct()
不会改变您的列表。它将为您提供一个具有不同值的结果,同时保持原始列表不变。您需要保存该结果并打印这些值,而不是原始列表:

var distinctNames = Nam.Distinct().ToList();
distinctNames.ForEach(item => Console.WriteLine(item));

谢谢你说这是个家庭作业问题。 你就快到了。 你写的地方:

Nam.Distinct().ToArray();
Nam.ForEach(item => Console.WriteLine(item));
就是你有点小问题的地方
Distinct()
不会改变您的列表。它将为您提供一个具有不同值的结果,同时保持原始列表不变。您需要保存该结果并打印这些值,而不是原始列表:

var distinctNames = Nam.Distinct().ToList();
distinctNames.ForEach(item => Console.WriteLine(item));
虽然我在Nam列表中尝试了.Distinct(),但它仍然重复这些名称。我不想重复这些

但是,在一个循环中有一个循环,因此内部循环的重复次数与外部循环中的项目重复次数相同

如果要合并studentlist1和studentlist2,只需将它们全部添加到新列表中即可

var allStudents = new List<Student>();

allStudents.AddRange(studentList1);
allStudents.AddRange(studentList2);
字典实际上是一个
KeyValuePair
列表,即一个列表列表-您可以使用两个循环:

foreach(var kvp in d) // for every keyvaluepair
{
  Console.WriteLine("Students with a GPA of " + kvp.Key); //Key is a float of the gpa

  foreach(var s in kvp.Value) //value is a List<Student>
    Console.Write(s.strName + " ");
}
  
这有点类似于准备字典的循环<代码>组就像一组列表(我称它们为不同的名称,我可以更容易地引用它们),内部列表中的每个项目都是一个学生,并且内部列表有一个键,即内部列表中每个学生的gpa。在外部数组中,每个不同的gpa有一个列表,这意味着对于四个学生,三个gpa为4,一个gpa为5,将成为大小为2的数组(两个不同的gpa值),数组中的第一个元素是长度为3的列表,键为4(三个学生的gpa为4)。数组中的第二个元素是长度为1、键为5的列表(一名学生的gpa为5)

这些东西实际上并不是数组和列表,但最终它们看起来像我们以前看到的字典——本质上是一种将所有具有相同gpa的学生收集到一个列表中的方法,并且每个不同gpa都有一个列表

虽然我在Nam列表中尝试了.Distinct(),但它仍然重复这些名称。我不想重复这些

但是,在一个循环中有一个循环,因此内部循环的重复次数与外部循环中的项目重复次数相同

如果要合并studentlist1和studentlist2,只需将它们全部添加到新列表中即可

var allStudents = new List<Student>();

allStudents.AddRange(studentList1);
allStudents.AddRange(studentList2);
字典实际上是一个
KeyValuePair
列表,即一个列表列表-您可以使用两个循环:

foreach(var kvp in d) // for every keyvaluepair
{
  Console.WriteLine("Students with a GPA of " + kvp.Key); //Key is a float of the gpa

  foreach(var s in kvp.Value) //value is a List<Student>
    Console.Write(s.strName + " ");
}
  
这有点类似于准备字典的循环<代码>组就像一组列表(我称它们为不同的名称,我可以更容易地引用它们),内部列表中的每个项目都是一个学生,并且内部列表有一个键,即内部列表中每个学生的gpa。在外部数组中,每个不同的gpa有一个列表,这意味着对于四个学生,三个gpa为4,一个gpa为5,将成为大小为2的数组(两个不同的gpa值),数组中的第一个元素是长度为3的列表,键为4(三个学生的gpa为4)。数组中的第二个元素是长度为1、键为5的列表(一名学生的gpa为5)


这些东西实际上不是数组和列表,但最终它们看起来像我们以前看到的字典——本质上是一种将所有具有相同gpa的学生收集到一个列表中的方法,并且每个不同gpa都有一个列表

哦,嗯,但它仍然提供相同的输出。我试图删除
控制台.WriteLine(“\n”+fX.fltGPA),但这不是问题。哦,嗯,但它仍然提供相同的输出。我试图删除
控制台.WriteLine(“\n”+fX.fltGPA)
,但这不是问题所在。我们不介意你在家庭作业上寻求帮助,我们只介意人们要求我们做家庭作业时。
foreach(studentlist1中的学生Fx)foreach(studentlist2中的学生Fx)
-我建议不要单独区分变量名。这些变量最好称为st1和st2。我们不介意您在家庭作业中寻求帮助,我们只介意当人们要求我们做家庭作业时,
foreach(studentlist1中的Student Fx)foreach(studentlist2中的Student Fx)
-我建议不要仅按大小写区分变量名称。这些变量最好称为st1和st2