我正在研究餐廳POS(Samba pos)的源代碼,並且我在打印票證時如何格式化輸出有兩個問題。排序和分組
下面的代碼收集產品標籤,製作標題,然後對標題下方的產品進行排序。
問題1:我在報頭的順序沒有任何影響,所以輸出的樣子:
主菜
牛排22,50
飲料
可樂2,00
起動
湯3,50
正確的順序應該是啓動器 - >主菜 - >甜品 - >飲料 如果我能標題的字母順序,我將幫助非常排序。我想改變組標籤分爲:1個起動器,2 Maincourse等等等等
問題2:
該產品在程序的早期階段進行分組。由於程序員的選擇,分組對我而言效果不佳。我有一個長長的清單上的機票,如:
1個可樂2,00
2×可樂4,00
有沒有辦法來組產品在這裏,讓我有:
3×可樂6,00
這裏是一段代碼:
if (template.GroupTemplate.Contains("{PRODUCT TAG}"))
{
var groups = lines.GroupBy(GetMenuItemTag);
var result = new List<string>();
foreach (var grp in groups)
{
var grpSep = template.GroupTemplate.Replace("{PRODUCT TAG}", grp.Key);
result.AddRange(grpSep.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries));
result.AddRange(grp.SelectMany(x => FormatLines(template, x).Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)));
}
return result;
}
我有噸o排序var groups
。問題在於循環內文本{PRODUCT TAG}被替換爲grp.Key
,因此在循環之前訂購var groups
可能無效(是否需要額外的循環?)。
將產品添加到標題是在循環的第3行完成的。是否有可能在這裏分組項目?
我有傾倒整個文件位置: http://pastebin.com/qFr5wN28
編輯:
這段代碼是在ticketprinter出示車票。票看起來是這樣的:
BON
Datum: 2-2-2013
Tijd: 18:35
Tafel nr.: B22
Bon nr: 2
------------------------------------------
Breakfast
- 1 Toast and Jam 1,50
- 1 Egg, Bacon Cheese 3,99
- 1 Toasted Bagel Cheese 2,25
- 1 Toasted Bagel Jam 1,50
- 2 Toast and Jam 1,50
- 1 Egg, Bacon Cheese 3,99
- 1 Bacon and Cheese 3,49
- 1 Bacon and Tomato 3,49
Deserts
- 1 Rice Pudding 2,25
- 1 Fruit Danish 1,50
Main course
- 1 Chicken Garden Wrap 5,25
- 1 Chicken Caesar Wrap 5,75
- 1 Canadian Wrap 6,99
- 1 Chicken Greek Wrap 6,99
標題是我可以添加到產品的標籤。 有幾件事情是錯誤的:文章上方的標題(沙漠,主要課程)隨機出現。我想對它們進行排序。並非所有的文章都是分組的,例如「烤麪包和果醬」。如果我可以對標題進行排序,我會稍微更改標記。所需的輸出會是這樣的:通過組
var groups = lines.GroupBy(GetMenuItemTag).OrderBy(l => l.Key);
也環路和修改你的關鍵字的值:
------------------------------------------
1 Breakfast
- 3 Toast and Jam 1,50
- 2 Egg, Bacon Cheese 3,99
- 1 Toasted Bagel Cheese 2,25
- 1 Toasted Bagel Jam 1,50
- 1 Bacon and Cheese 3,49
- 1 Bacon and Tomato 3,49
2 Main course
- 1 Chicken Garden Wrap 5,25
- 1 Chicken Caesar Wrap 5,75
- 1 Canadian Wrap 6,99
- 1 Chicken Greek Wrap 6,99
3 Deserts
- 1 Rice Pudding 2,25
- 1 Fruit Danish 1,50
我不是100%清楚你的問題,但如果'grp.Key'是一個問題,你可以在創建'groups'創建一個新的投影時添加'Select'。 –
最大的問題是我沒有C#經驗:-)出現在票據上的組的順序是隨機的。這很混亂。我必須找到一種方法來對這些組進行排序,並且打印在票上的組以邏輯方式出現,如:1.首發2.主要課程3.沙漠等 –
您可以使用'OrderBy'輕鬆訂購組。爲了給你更多的幫助,如果你可以用非常小的數據樣本來編輯你的問題,這些數據清楚地顯示你想要什麼,以及你的代碼目前在做什麼,這將是有用的。 –