Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_C#_List - Fatal编程技术网

C# 如何检查列表中的一个项目后面是否有另一个项目?C

C# 如何检查列表中的一个项目后面是否有另一个项目?C,c#,list,C#,List,我有这些名字: Sean Winnie Brian Amy Samir Joe Bethany Bruno Anna Matthew Lucas Gabriel Martha Philip Andre Danielle Leo Cinthia Paula Mary Jane Anderson Priscilla Regis Julianna Arthur Mark Marina Alex Andrea 这个练习说,在一行中用空格隔开的名字不能互相赠送礼物。就像利奥不能给辛西娅礼物,乔不能给贝瑟

我有这些名字:

Sean
Winnie
Brian Amy
Samir
Joe Bethany
Bruno Anna Matthew Lucas
Gabriel Martha Philip
Andre
Danielle
Leo Cinthia
Paula
Mary Jane
Anderson
Priscilla
Regis Julianna Arthur
Mark Marina
Alex Andrea
这个练习说,在一行中用空格隔开的名字不能互相赠送礼物。就像利奥不能给辛西娅礼物,乔不能给贝瑟尼礼物等等

所以我在寻找一个代码,我可以用它来检查,如果我有一个列表,并且这些行被导入到这个列表中,那么我想检查是否有一个特定的字符串,比如Leo后面跟Cinthia,后面跟空格,那么这两个人就不能给对方送礼物了

到目前为止,我在这里:

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

namespace SecretSanta
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader File = new StreamReader("SSfile.txt");
            List<string> Names = new List<string>();
            string line = File.ReadLine();

            while (line != null)
            {
                Console.WriteLine(line);
                line = File.ReadLine();
                Names.Add(line);
            }

            Console.ReadKey();    
        }
    }
}

问题是,在我对你的问题的理解中,这样做是行不通的

你有一张名单,上面写着{'Sean','Winnie','Joe',Bethany'} 所以,如果你检查乔是否被伯大尼跟踪,然后不允许他给伯大尼送礼,你也会禁止肖恩给温妮送礼。。。 我认为要实现此功能,您需要不止一个列表。 您可以使用一个列表,其中包含一行中的人员 e、 g.{'Sean'},{'Winnie'},{'Joe',Bethany'}


希望我正确理解了您的问题。

您的问题是什么?因此,我正在寻找一个代码,可以用来检查,如果我有一个列表,并且这些行被导入到该列表中,那么我想检查是否有某个字符串,比如Leo后面跟Cinthia,后面跟空格,那么这两个人就不能互相送礼物了。在这里你可以做很多事情,但这里有一个简短的片段可以告诉你正确的方向:var names=line.Split,StringSplitOptions.removemptyentries。当从列表中提取一个项目并检查它是否存在两个名称时,可以使用方法Split。在这种情况下,您只需填写if sentenceList name=File.ReadLinesfilename.Selectline=>line.Split.ToList;字符串名称1=Gabriel;字符串名称2=Philip;bool canGiveGift=!names.Anyx=>x.Containsname1&&x.Containsname2;我想你理解我的问题。这就是所谓的二维列表吗?简单地使用一个列表,然后使用String.Split查看每个条目中是否有多个名称要简单得多。使用多个列表或嵌套列表会使它变得不必要的复杂。@约翰代尔你的问题并不表明是这种情况。回答得好,尽管字典是一个多余的工具。KeyValuePair集合更适合这种情况。你的答案非常复杂,但是如果你用一个简单的列表代替字典,你会得到更好的结果。
 class Program
    {
        static Dictionary<string, List<string>> Names = new Dictionary<string, List<string>>();
        static void Main(string[] args)
        {
            StreamReader File = new StreamReader("SSfile.txt");
            string line = File.ReadLine();
            while (line != null)
            {
                Console.WriteLine(line);
                line = File.ReadLine();
                var names = line.Split(" ", StringSplitOptions.RemoveEmptyEntries)
                Names.Add(names[0], names.Skip(1).ToList());
            }
            Console.ReadKey();
        }

        static bool canGive(giver, givee)
        {
           return Names[giver].Any(item => item == givee);
        }
    }