我需要做什么我一次创建一个字符串列表。该项目应该做的是将输入分为两类,用户名和用户类型。输入将类似于:john admin
史密斯老师
艾伦管理员。
输出将是这样的:
admin john,allen。
这是我现在的代码,但我无法弄清楚如何在运行时将名称添加到组中。
Regex regex = new Regex(@"([A-z]{1,})\s([a-z]{1,})");
List<string> input= new List<string>();
List<string> names = new List<string>();
List<string> groups = new List<string>();
int i =0;
string experimentalString=null;
Console.WriteLine("Please enter the users' names and corresponding groups seperated by a whitespace," +
" or type sort to show results ");
while (string.Compare(experimentalString ,"sort")!=0)
{
experimentalString = null;
experimentalString = Console.ReadLine();
Match match = regex.Match(experimentalString);
if (match.Success)
{
input.Add(experimentalString);
Console.WriteLine(input[i]);
}
else
throw new Exception ("invalid input format");
//if (input[i].Equals("sort", StringComparison.OrdinalIgnoreCase))
//{
// break;
//}
i++;
}
for (int count = 0; count < input.Count-1; i++)
{
names.Add(input[i].Substring(0, input[i].IndexOf(' ')));
groups.Add(input[i].Substring(input[i].IndexOf(' '), input.Count - 1));
}
答案 0 :(得分:1)
使用Groups属性。
foreach(var match in regex.Matches(inputStr).Cast<Match>())
{
var name = match.Groups[1];
var type = match.Groups[2];
}
你还需要使用一个类,你不应该使用sperate列表。
public class User
{
public User(string name, string type)
{
Name = name;
Type = type;
}
public string Name { get; }
public string Type { get; }
}
然后你可以有用户列表。
List<User> users = new List<User>();
//...
foreach(var match in regex.Matches(inputStr).Cast<Match>())
{
var name = match.Groups[1];
var type = match.Groups[2];
users.Add(new User(name, type));
}
如果您想按类型对用户进行分组,请使用Linq扩展方法&#34; GroupBy&#34;。
var groups = users.GroupBy(u => u.Type);
foreach(var group in groups)
{
// group contains all users with same type
foreach(var user in group)
{
//...
}
}
如果你想在某种集合中保存组,我建议你使用Dictionary。
var dictionary = groups.ToDictionary(g => g.Key, g => g.ToList());
现在,您可以使用类型作为键来访问具有相同类型的用户列表。
var teachers = dictionary["teacher"];
var admins = dictionary["admin"];
要在控制台中打印用户,您应该逐个打印属性。
Console.WriteLine($"Name: {user.Name}, Type:{user.Type}");
或者,您可以在User类中覆盖ToString。
// Put this method in User class
public override string ToString()
{
return $"User Name: {Name}, User Type {Type}";
}
现在您可以轻松打印用户
Console.WriteLine(user);