是否可以仅使用 for 循环迭代列表?

Posted

技术标签:

【中文标题】是否可以仅使用 for 循环迭代列表?【英文标题】:Is it possible to iterate list with for loop only? 【发布时间】:2022-01-02 21:05:52 【问题描述】:

这是控制台程序中的 C# 类

    public class Person
    
        public string Name;
        public int BirthYear;
        public int Age(int birthYear)
        
            DateTime presents = DateTime.Now;
            int presentAge = presents.Year - birthYear;
            return presentAge;
        

    

也是主程序

static void Main(string[] args)
        
            Console.WriteLine("Input peoples: ");
            int people = Convert.ToInt32(Console.ReadLine());
            Person a = new Person();
            for(int i = 0; i < people; i++)
            
                Console.WriteLine("Person 0", i + 1);
                Console.Write("Enter the name: ");
                a.Name = Console.ReadLine();
                Console.Write("Enter the birth year: ");
                a.BirthYear = Convert.ToInt32(Console.ReadLine());
                int present = a.Age(a.BirthYear);
                Console.WriteLine("Hello 0, your age is 1 years old", a.Name, present);
            
        

我输入了2个人,结果是这样的:

Person 1
Enter the name: Lu Bu
Enter the birth year: 1998
Hello Lu Bu, your age is 23 years old
Person 2
Enter the name: Diao Chan
Enter the birth year: 2000
Hello Diao Chan, your age is 21 years old

我想达到这样的结果:

Person 1
Enter the name: Lu Bu
Enter the birth year: 1998
Person 2
Enter the name: Diao Chan
Enter the birth year: 2000
Hello Lu Bu, your age is 23 years old
Hello Diao Chan, your age is 21 years old

是否可以仅使用for 循环来实现,还是必须使用List&lt;&gt;

PS:我的意思是问题中的列表不是 List&lt;&gt;虽然

【问题讨论】:

所以您想要一个循环来获取所有用户输入,然后完成后,您想打印您提交的所有数据吗?那么您将需要一种方法来从这两个循环中传输数据。 您可以在循环内将 Hello 消息附加到 StringBuilder 并在循环退出后将其写入 Console。是这个意思吗? 如果没有两个循环和某种集合,我看不出你会怎么做。 您的人数不确定,因此您需要一个集合来存储他们,然后是一个循环来为每个人写下您的句子。无论如何,在您的示例中,每个人都会覆盖前一个,因为只有一个 Person 实例。我怀疑这是你想要的吗? @PostJavanese 有人打败了我,虽然我不会同时使用 .AppendLine() 和 .Append(),但我只会使用 .AppendLine("...消息... ") 【参考方案1】:

您可以存储提供的信息(hellos)并在最后打印。你不必使用List&lt;string&gt;,它可以是任何集合(比如Queue&lt;string&gt;),甚至是StringBuilder

        StringBuilder hellos = new StringBuilder();

        for(int i = 0; i < people; i++)
        
            Console.WriteLine("Person 0", i + 1);
            Console.Write("Enter the name: ");
            a.Name = Console.ReadLine();
            Console.Write("Enter the birth year: ");
            a.BirthYear = Convert.ToInt32(Console.ReadLine());
            int present = a.Age(a.BirthYear);

            // Instead of printing, we collect the data...
            if (hellos.Length > 0)
              hellos.AppendLine();

            hellos.Append($"Hello a.Name, your age is present years old");
        

        // ...and after the loop we print out all the data collected 
        Console.WriteLine(hellos);

【讨论】:

以上是关于是否可以仅使用 for 循环迭代列表?的主要内容,如果未能解决你的问题,请参考以下文章

使用 for 循环、if 循环和 zip 迭代 panda 数据帧和列表

Python高级特性:Python迭代生成器列表生成式

使用 For Each 循环遍历列表时删除列表中的项目

迭代器的应用以及说明的问题

迭代器

我应该使用迭代器还是 for 循环来迭代?