でモデルのリストを並べ替え:私はこのようなオブジェクトのリストをソートしようとしています2つのプロパティ
products.Sort((a, b) =>
{
var x = string.CompareOrdinal(a.SelectToken("model").ToString(), b.SelectToken("model").ToString());
var z = string.CompareOrdinal(b.SelectToken("colour").ToString(), colour);
return x > 0 ? z : x;
});
と私は重複を削除することができますので、私は逆に、リストをループにしたい:
// Loop through products in reverse
for (var i = products.Count() - 1; i >= 0; i--)
{
// Get our product
var product = products[i];
// Get our product colour
var productColour = product.SelectToken("colour").ToString();
// If our colour is black
if (colour == "Black")
{
// If the product colour is not black, remove the duplicate product
if (!productColour.Equals(colour))
products.RemoveAt(i);
}
else
{
// Get our product model
var productModel = product.SelectToken("model").ToString();
// If we are the same model but a different colour, remove the duplicate
if (productModel.Equals(model) && !productColour.Equals(colour))
products.RemoveAt(i);
// Update our variable
model = productModel;
}
}
しかし、それだけでは簡単ではありません。 色の変数は、デフォルトでは「黒」ですが、実際にどの色に設定することもできます。だから、私はのモデルを最初に並べ替え、次にの色をで並べ替えたいが、このような色を並べ替えるようにしたいと思う。色は「ピンク」である場合、リストは次のようにする必要があります:
[{
colour: 'Any'
},{
colour: 'Any'
},{
colour: 'Any'
},{
colour: 'Black'
},{
colour: 'Black'
},{
colour: 'Pink'
}]
をだから、基本的には、選択した色が黒でない場合、それは一種の一番下にあることと、直接(他のすべての色を黒に続く必要がありますこれらの2つの前に来てください)。選択した色が黒の場合、黒はリストの一番下に表示されます。 誰かがこれで私を助けることができますか?
情報だけのために、これはソートされる項目の一つの例である:生成物が黒色の色または選択された色を有していなくてもよいことは全く可能である
{
"id": 3797,
"title": "Canon EOS 100D Digital SLR Camera with 18-55 IS STM Lens, HD 1080p, 18MP, 3\" LCD Touch Screen",
"shortTitle": "Canon EOS 100D Black",
"brand": "Canon",
"model": "EOS 100D",
"colour": "Black",
"gtin": "8714574602721",
"image": "http://piiick.blob.core.windows.net/images/Canon-EOS-100D-18-55-Black-8714574602721.png",
"type": "Digital SLR",
"lensFocalLength": "18-55",
"lensType": "IS STM",
"lensMount": "EF/EF-S",
"maxAperture": "999",
"connectivity": "",
"shootingModes": "Scene Intelligent Auto (Stills and Movie), No Flash, Creative Auto, Portrait, Landscape, Close-up, Sports, SCN(Kids, Food, Candlelight, Night Portrait, Handheld Night Scene, HDR Backlight Control), Program AE , Shutter priority AE, Aperture priority AE, Manual (Stills and Movie)",
"weight": 410.0,
"width": 116.8,
"height": 90.7,
"depth": 69.4,
"digitalZoom": "N/A",
"opticalZoom": "N/A",
"waterproof": false,
"maxVideoResolution": "1920 x 1080",
"sensorType": "CMOS",
"sensorSize": "22.3 x 14.9 mm",
"continuousShootingSpeed": "4",
"iso": "1600",
"style": "traditional",
"designer": "",
"dateAnnounced": "10/06/2008",
"focusPoints": 7
}
、私それを私のリストから削除したくない(重複モデルのみ)。
トライユーザー 'xs.OrderBy(X => ...)。ThenBy(X => ...)'あなたがどこにいる追加必要以上に多くの仕事をしています。また、 'xs.GroupBy(x => ...) 'を使って重複を取り除くこともできます。 –
OrderBy()。ThenBy()'は黒の前に色が必要なので動作しません。選択された色は黒ではない)。選択した色が黒でもうまくいくはずです。また、 'GroupBy'は、一部のモデルが黒や選択された色を持たないかもしれないので動作しません。 – r3plica
Blackを先頭に置くカスタムキー比較を書くことができます。 –