AMcoder - javascript, python, java, html, php, sql

Ինչպե՞ս դասավորել զանգվածը Ruby-ում որոշակի կարգով:

Ես ուզում եմ տեսակավորել զանգվածը մեկ այլ զանգվածում տրված հատուկ հերթականությամբ:

EX. դիտարկել զանգված

a=["one", "two", "three"]
b=["two", "one", "three"]

Այժմ ես ուզում եմ «a» զանգվածը դասավորել «b»-ի կարգով, այսինքն

a.each do |t|
  # It should be in the order of 'b'
  puts t
end

Այսպիսով, արդյունքը պետք է լինի

two
one 
three 

Կա՞ն առաջարկներ:

26.11.2010

  • Ինչպես կա, այս հարցը անիմաստ է: Օրինակը ցույց է տալիս ճիշտ նույն արժեքներով երկու զանգված (միայն տարբեր հերթականությամբ): Եթե ​​ցանկանում եք կրկնել a-ի տարրերը b-ում հայտնաբերված հերթականությամբ, լավ, կրկնեք b-ը և ավարտեցիք:-) Այսպիսով, ենթադրում եմ, որ ավելի շատ պայմաններ կան, միգուցե զանգվածների տարրերը չեն համընկնում: Արդյո՞ք օբյեկտների միջև ==-ն այն չէ, ինչ ձեզ հարկավոր է, այլ այլ տեսակի հավասարություն: ցույց տվեք ավելի բովանդակալից օրինակներ: 14.12.2012

Պատասխանները:


1

Array# sort_by-ն այն է, ինչին հետևում եք:

a.sort_by do |element|
  b.index(element)
end

Ավելի լայնածավալ տարբերակ՝ ի պատասխան մեկնաբանության.

a=["one", "two", "three"]
b=["two", "one", "three"]

lookup = {}
b.each_with_index do |item, index|
  lookup[item] = index
end

a.sort_by do |item|
  lookup.fetch(item)
end
26.11.2010
  • Ամենապարզը փոքր զանգվածների համար, բայց նշեք, որ սա O(n^2) է, երբ խնդիրը O(n է): 14.12.2012
  • @tokland Լավ: Տրամադրվել է ավելի լայնածավալ տարբերակ: 14.12.2012
  • ճշգրիտ, ստեղծեք օժանդակ քարտեզագրում + sort_by: Ես հավանաբար կգրեի այն lookup = Hash[b.to_enum.with_index], բայց լավ, դա ընդամենը մանրուք է: Btw, տեսա՞ք իմ մեկնաբանությունը հարցին։ հիշու՞մ եք, թե ինչ ուներ ՕՊ-ն: 14.12.2012
  • @tokland և ես հավանաբար կօգտագործեի a.sort_by(&lookup.method(:fetch)): Ես կասկածում եմ, որ նույնիսկ ՕՊ-ն չի հիշի, թե ինչ նկատի ուներ: Երբեմն ես պատվիրում եմ օբյեկտների զանգված՝ հիմնված հատկանիշի վրա, որտեղ կա մեկ այլ զանգված, որը պարունակում է այդ հատկանիշին հավասար արժեքներ, սակայն: 14.12.2012
  • Այո, տվյալ հատկանիշի վրա հավասարությունը շատ տարածված է: Եվ այո, ես գիտեմ, որ դու &:obj.method(:name) հնարքի ընկերն ես, ես հիշում եմ քո բլոգի գրառումն այդ մասին :-) 14.12.2012
  • Էնդրյու, քո լուծումն այնքան էլեգանտ է, ես կարող եմ միայն ցանկանալ, որ ես ինքս դա հորինեի: Շնորհակալություն։ 18.02.2015

  • 2

    Եթե ​​b-ը ներառում է a-ի բոլոր տարրերը, և եթե տարրերը եզակի են, ապա.

    puts b & a
    
    26.11.2010
  • Եթե ​​այդ պայմանը պահպանվում է, ապա b&a == b: 07.01.2012
  • @PanThomakos, Այն կարող է ներառել տարրեր և ունենալ նաև ուրիշներ: %w{ameba bug bird dog horse shark} & %w{horse ameba shark} => ["ameba", "horse", "shark"] 08.01.2012
  • Կարծում եմ, որ հիանալի է, որ սա աշխատում է, բայց ահա իմ վերապահումները. 2. Կոդը փխրուն է: Եթե ​​ցուցակներն ունեն կրկնօրինակ տարրեր կամ սխալ չափի են, կոդը կոտրվում է: Եթե ​​&-ի իրականացումը փոխվում է այնպես, որ տարրերն այլևս չեն դասակարգվում, կոդը կոտրվում է: 08.01.2012

  • 3

    Ենթադրելով a-ը պետք է տեսակավորվի b-ի տարրերի կարգով

    sorted_a = 
    a.sort do |e1, e2|
      b.index(e1) <=> b.index(e2)
    end
    

    Ես սովորաբար օգտագործում եմ սա ActiveRecord-ում սխալ հաղորդագրությունները դասավորելու համար՝ ըստ ձևի դաշտերի տեսքի հերթականության:

    26.11.2010
  • Ինչու՞ օգտագործել sort-ը, երբ կարող եք օգտագործել sort_by-ը: 26.11.2010
  • Կատարում. ruby-doc.org/core/classes/Enumerable.html#M003120 Ստուգեք հենանիշները: 26.11.2010
  • Իմ հենանիշը ցույց է տալիս N վայրկյան sort-ի համար, 0.07 N վայրկյան sort_by-ի համար և 0.01 N&-ի համար: 26.11.2010
  • Որովհետև sort_by-ում ինդեքսները հաշվարկվում են միայն մեկ անգամ յուրաքանչյուր տարրի համար, իսկ sort-ում դա հնարավոր կլիներ միայն այն դեպքում, եթե դա լիներ որոշակի քեշ: Իսկ &-ը կազմված է Ruby-ով։ 26.11.2010
  • Փաստաթղթում նշված չափանիշը համեմատում է sort-ն առանց բլոկի sort_by-ի հետ՝ օգտագործելով (no-op) բլոկը: Եթե ​​համեմատեք sort-ը բլոկի հետ (ինչպես այս պատասխանի օրինակը) համապատասխան sort_by տարբերակի հետ, կտեսնեք, որ sort_by-ը զգալիորեն ավելի արագ է: 26.11.2010
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..