2013-11-17 5 views
0

Я новичок в программировании, и я подумал, что было бы здорово начать с чего-то простого, но полезного для меня и моей подруги.Сортировка информации в список вывода

Я хотел бы создать программу списка покупок, которая будет принимать мои объекты, которые я вводил в текстовое поле, а затем сортировать их на основе определенных групп. Затем вывести эту информацию в легко читаемый список, уже классифицированный для удобства покупок.

Мой вопрос в том, что; Как сортировать информацию, которую я помещаю в богатое текстовое поле? У меня есть два богатых текстовых поля, и я хотел бы вводить информацию в одну, а затем выводить эту информацию в другую, но она сортируется по моим предпочтениям.

Заранее спасибо. :-)

ответ

0

Так как вы хотите, чтобы сгруппировать их, я бы предложил создать небольшую 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; 
     } 
    } 

} 

Чтобы избежать непрерывного пинг-понга, если у вас есть другой вопрос, просто откройте новый (если он уместен). В противном случае вы можете повышать, понижать и отмечать как ответ, если это ответили на ваш вопрос. :)

+0

Благодарим за ответ. Я думаю, что мой уровень программирования по-прежнему слишком низок даже для этого T_T Мне нравится, как вы это выразили, и это в значительной степени то, что я ищу.Читая это, это имеет смысл для меня, однако, пытаясь поместить это в VS2012, это просто дает мне ошибки. – Advancin

+0

Возможно ... но 1. Вам нужно где-то начать. 2. Это компилируется и работает, поэтому вы можете играть с ним и учиться на нем. 3. Это единственный способ узнать, глядя на вещи, которые мы еще не знаем :) – Noctis

+0

Да, вы правы :-) Я вижу, что на примере у вас есть «console.out.writeline», поэтому для этого я должен иметь проект как «консольное приложение» или «winformapp»? В консольном приложении я помещаю это в "static void Main (string [] args)" правильно? или я совершенно не ...? – Advancin

0

Ну, если ваш первый RichTextBox имеет каждый элемент отделен от чего-то известно (например, NewLine), то оно должно быть, как прямо вперед, как это:

var list = richTextBox1.Text 
    .Split(new[] { Environment.NewLine }, 
     StringSplitOptions.RemoveEmptyEntries) 
    .Sort(); 
richTextBox2.Text = string.Join(Environment.NewLine, list.ToArray()); 

Это будет использовать по умолчанию алгоритм сортировки для типа. В этом случае string. Поэтому он сортирует их по алфавиту.

Смежные вопросы