Так как вы хотите, чтобы сгруппировать их, я бы предложил создать небольшую GroceryItem
так:
class GroceryItem
{
GroceryItem(string category, string name) {
Category = category;
ItemName = name;
}
public string Category {get;set;}
public string ItemName {get;set;}
}
Затем вы можете легко разобрать с первым текстовым полем элементов. Давайте предположим, что они выглядят так:
Vegies, томат
Мясо ягненка
Vegies, картофельные
Мясо, Цыпленок
Просто прочитал их все, разделить на ,
, чтобы получить 2-х частей для каждый, и создать новый GroceryItem
:
List<CategoryItem> shoppingList = new List<CategoryItem>();
foreach (var line in your_lines_collection)
{
var parts = some_line.Split(',');
shoppingList.Add(new GroceryITem(parts[0],parts[1]));
}
и последнее, но не менее , после того, как у вас есть список из них (shoppingList
), вы можете использовать linq для сортировки вашего сердечного контента. Вот пример:
List<GroceryItem> shoppingList = new List<GroceryItem>();
List<string> groceries = new List<string>(){"veg, pot", "veg, tom", "meat, chicken", "meat, veal"};
foreach (var line in groceries)
{
var parts = line.Split(',');
shoppingList.Add(new GroceryItem(parts[0],parts[1]));
}
var sorted_list_by_ItemName =
from item in shoppingList
orderby item.ItemName
group item by item.Category into groups
select groups
;
foreach (var gr in sorted_list_by_ItemName)
{
Console.Out.WriteLine("[{0}] :", gr.Key);
foreach (var it in gr)
Console.Out.WriteLine(" {0}", it);
}
Этот выход будет:
[meat] :
meat , chicken
meat , veal
[veg] :
veg , pot
veg , tom
Затем вы можете просто напечатать это на другом текстовом поле, или работать с ним, как вы хотите :)
As за каждый комментарий, вот весь код для консоли, просто вставьте его в свою визуальную студию, и он должен работать:
using System;
using System.Collections.Generic;
using System.Linq;
internal class Program
{
public static void Main(string[] args)
{
List<GroceryItem> shoppingList = new List<GroceryItem>();
List<string> groceries = new List<string>() { "veg, pot", "veg, tom", "meat, chicken", "meat, veal" };
foreach (var line in groceries)
{
var parts = line.Split(',');
shoppingList.Add(new GroceryItem(parts[0], parts[1]));
}
var sorted_list_by_ItemName =
from item in shoppingList
orderby item.ItemName
group item by item.Category into groups
select groups;
foreach (var gr in sorted_list_by_ItemName)
{
Console.Out.WriteLine("[{0}] :", gr.Key);
foreach (var it in gr)
Console.Out.WriteLine(" {0}", it);
}
Console.ReadKey();
}
public class GroceryItem
{
public GroceryItem(string category, string name)
{
Category = category;
ItemName = name;
}
public string Category { get; set; }
public string ItemName { get; set; }
public override string ToString()
{
return Category + " , " + ItemName;
}
}
}
Чтобы избежать непрерывного пинг-понга, если у вас есть другой вопрос, просто откройте новый (если он уместен). В противном случае вы можете повышать, понижать и отмечать как ответ, если это ответили на ваш вопрос. :)
Благодарим за ответ. Я думаю, что мой уровень программирования по-прежнему слишком низок даже для этого T_T Мне нравится, как вы это выразили, и это в значительной степени то, что я ищу.Читая это, это имеет смысл для меня, однако, пытаясь поместить это в VS2012, это просто дает мне ошибки. – Advancin
Возможно ... но 1. Вам нужно где-то начать. 2. Это компилируется и работает, поэтому вы можете играть с ним и учиться на нем. 3. Это единственный способ узнать, глядя на вещи, которые мы еще не знаем :) – Noctis
Да, вы правы :-) Я вижу, что на примере у вас есть «console.out.writeline», поэтому для этого я должен иметь проект как «консольное приложение» или «winformapp»? В консольном приложении я помещаю это в "static void Main (string [] args)" правильно? или я совершенно не ...? – Advancin