-4

I can't seem to get my head around this.
I have the following:

private String[] PREFERED = new String[] { "37", "22", "18" };

    private List<Stream> library;

    public class Stream
    {
        public String ID { get; set; }
        public String URL { get; set; }
        public String Description { get; set; }
        public String Type { get; set; }
    }

And I would like to sort the List<Stream> named library using the PREFERED String array so that my result would be the library with following order: 35,22,18,...

library = library.OrderBy(o => Array.IndexOf(PREFERED, o.ID)).ToList();

But I'm not getting the expected result...

JSON

[{"ID":"44","URL":null,"Description":".webm (854x480)","Type":".webm"},
{"ID":"35","URL":null,"Description":".3gp (854x480)","Type":".3gp"},
{"ID":"43","URL":null,"Description":".webm (640x360)","Type":".webm"},
{"ID":"34","URL":null,"Description":".flv (640x360)","Type":".flv"},
{"ID":"18","URL":null,"Description":".mp4 (480x360)","Type":".mp4"},
{"ID":"5","URL":null,"Description":".flv (400x240)","Type":".flv"},
{"ID":"36","URL":null,"Description":".flv (400x240)","Type":".flv"},
{"ID":"17","URL":null,"Description":".3gp (176x144)","Type":".3gp"}] 

Check if ASP.NET MVC 3 installed and if it is not install it from internet with Inno Setup

I want to check the registry for the existence of Asp.net mvc 3. If it is not contained in the system, MVC 3 itself must itself be installed from internet automatically. I have a code below for it, but I have a compiler error for the line "AddProduct(bla bla bla)". It says "Unknown Identifier 'AddProduct'". Why is that anyway?

 const
AspNetMVC3_url = 'http://download.microsoft.com/download/F/3/1/F31EF055-3C46-4E35-   AB7B-3261A303A3B6/AspNetMVC3ToolsUpdateSetup.exe';
 procedure AspNetMVC3();
 var
version: cardinal;
 begin
if not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\  {37C939A9-427D-4F06-A14C-5C672EF51C6C}') then
 AddProduct('AspNetMVC3ToolsUpdateSetup.exe','',CustomMessage('AspNetMVC3_title'),CustomMessage   ('AspNetMVC3_size'),AspNetMVC3_url,false,false);
end;
4

3 に答える 3

1

PREFEREDにIDが含まれていない場合でも、これは機能すると思いますlibrary

var ranks =
    PREFERED
        .Select((x, n) => new { x, n })
        .ToLookup(xn => xn.x, xn => xn.n);

library =
    library
        .OrderBy(l =>
            ranks[l.ID]
                .DefaultIfEmpty(int.MaxValue)
                .First())
        .ToList();

これが彼のコメントのリクエストによる説明です。

この線.Select((x, n) => new { x, n })は、一連の値を一連の値と、その一連のインデックスに射影します。

この行.ToLookup(xn => xn.x, xn => xn.n)は、キーが元のシーケンスにあったかどうかに関係なく、指定された任意のキーから 0 個以上の値のリストを返す辞書のような構造にシーケンスを変更します。キーが元のシーケンスにない場合は、空の値のシーケンスが返されます。

この式ranks[l.ID]は、シーケンス内の各 ID を取得しlibraryてルックアップを適用し、一連の値を返します。この式.DefaultIfEmpty(int.MaxValue)は、シーケンスに少なくとも 1 つの値があることを保証し、式.First()はシーケンスの最初の値を返します。したがって、これにより、ソース内の id に対して、シーケンスlibraryから一致する可能性のあるインデックス値を取得するか、id がシーケンスに含まれていない場合に保証されます。PREFEREDint.MaxValuePREFERED

次に、返された値で並べ替え、 でリストを再作成するだけ.ToList()です。

于 2013-10-07T13:26:58.237 に答える