একই উপাদানটি এন-টাইম দিয়ে কীভাবে একটি তালিকা তৈরি করবেন?


92

একই উপাদানটি এন-টাইম দিয়ে কীভাবে একটি তালিকা তৈরি করবেন?

ম্যানুয়ালি বাস্তবায়ন:

scala> def times(n: Int, s: String) =
 | (for(i <- 1 to n) yield s).toList
times: (n: Int, s: String)List[String]

scala> times(3, "foo")
res4: List[String] = List(foo, foo, foo)

একই কাজ করার জন্য কি কোনও অন্তর্নির্মিত উপায় আছে?

উত্তর:


168

দেখুন scala.collection.generic.SeqFactory.fill (ঢ: int) (ELEM: => ক) যে সংগ্রহে ডাটা স্ট্রাকচার, মত Seq, Stream, Iteratorএবং তাই, প্রসারিত:

scala> List.fill(3)("foo")
res1: List[String] = List(foo, foo, foo)

সতর্কতা এটি স্কেল ২.7 এ উপলব্ধ নয়।


আরও তথ্যের জন্য GenTraversableFactory দেখুন, এবং এই পৃষ্ঠায় # 14: নিকোলাস্টারলিং.ওয়ার্ডপ্রেস.কম
२०१২


9
(1 to n).map( _ => "foo" )

একটি যাদুমন্ত্র মত কাজ করে.


অ্যালোনসডেল আর্টে কেন এটি অপচয়?
k0pernikus

@ k0pernikus কারণ এর মানটি _আসলে কিছু যায় আসে না। আপনি কাজ করতে পারে n to 1 by -1, -1 to -n by -1ইত্যাদি
আলোনসো দেল আর্ট

4
অ্যালোনসডেল আর্টে শেষে, একজনের জন্য একটি অস্থায়ী লুপ পরিবর্তনশীল প্রয়োজন। এমনকি fillপদ্ধতির প্রয়োগটি অভ্যন্তরীণভাবে একটি অস্থায়ী পরিবর্তনশীল গঠন করে যার তালিকায় সঠিক পরিমাণটি উত্পাদন করা যতক্ষণ তার মান বিবেচিত হবে না। সুতরাং আমি অব্যবহৃত কিছু মনে করি না _
k0pernikus

4
@ k0pernikus আমি স্থানীয় স্কালার আরপিএলে বা স্ক্যাসি স্নিপেটে এটিকে কিছু মনে করব না। তবে একটি পেশাদার প্রকল্পে, আমি এটিকে রিফ্যাক্টরিংয়ের যথেষ্ট কারণ হিসাবে বিবেচনা করব।
অ্যালোনসো ডেল আর্টে

1

আমার কাছে আরও একটি উত্তর রয়েছে যা আমার মনে হয় ফ্ল্যাটম্যাপকে অনুকরণ করে (ডুপ্লিকেট এন প্রয়োগ করার সময় এই সমাধানটি ইউনিটটি ফেরত পেয়েছে)

 implicit class ListGeneric[A](l: List[A]) {
  def nDuplicate(x: Int): List[A] = {
    def duplicateN(x: Int, tail: List[A]): List[A] = {
      l match {
       case Nil => Nil
       case n :: xs => concatN(x, n) ::: duplicateN(x, xs)
    }
    def concatN(times: Int, elem: A): List[A] = List.fill(times)(elem)
  }
  duplicateN(x, l)
}

}

def times(n: Int, ls: List[String]) = ls.flatMap{ List.fill(n)(_) }

তবে এটি বরং পূর্বনির্ধারিত তালিকার জন্য এবং আপনি প্রতিটি উপাদানের n বার নকল করতে চান

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.