Есть ли эквивалент Scala для каталога python? [Дубликат]

foreach ($MainArray as $value) {
    $name = $value['Machine_Name'];
    unset($value['Machine_Name']);
    $ConvertedArray[$name][] = $value;
}
23
задан James McMahon 15 July 2012 в 20:46
поделиться

7 ответов

Любопытно, что никто не попробовал более прямой перевод:

""
.getClass.getMethods.map(_.getName) // methods
.sorted                             // sort
.filter(_ matches "(?i).*index.*")  // grep /index/i

Итак, некоторые случайные мысли.

  • Разница между «методами» и обручами выше поразительна, но никто никогда не говорил, что это была сила Явы.
  • Я скрываю что-то о sorted выше: на самом деле он принимает неявный параметр типа Ordering. Если бы я хотел сортировать сами методы, а не их имена, я должен был бы предоставить его.
  • A grep на самом деле является комбинацией filter и matches. Это немного сложнее из-за решения Java сопоставить целые строки, даже если ^ и $ не указаны. Я думаю, что было бы разумно иметь метод grep на Regex, который взял Traversable в качестве параметров, но ...

Итак, вот что мы можем с этим поделать :

implicit def toMethods(obj: AnyRef) = new { 
  def methods = obj.getClass.getMethods.map(_.getName)
}

implicit def toGrep[T <% Traversable[String]](coll: T) = new {
  def grep(pattern: String) = coll filter (pattern.r.findFirstIn(_) != None)
  def grep(pattern: String, flags: String) = {
    val regex = ("(?"+flags+")"+pattern).r
    coll filter (regex.findFirstIn(_) != None)
  }
}

И теперь это возможно:

"".methods.sorted grep ("index", "i")
40
ответ дан Daniel C. Sobral 18 August 2018 в 22:36
поделиться
  • 1
    Это почти то, что было у ОП, за исключением «отсортированных». Вы используете 2.8? – OscarRyz 22 May 2010 в 03:17
  • 2
    @Oscar Да, это 2.8. На Scala 2.7 есть sort, но не во всех сборниках. – Daniel C. Sobral 22 May 2010 в 03:31
  • 3
    Это не совсем то же самое - в Ruby x.methods включены методы, доступные через mixins, тогда как x.getClass.getMethods не находится в Scala. Попробуйте 1.methods в Ruby, а затем попробуйте 1.getClass.getMethods в Scala. – Rich 20 January 2014 в 20:02

Это до тех пор, пока я не получил:

"".getClass.getMethods.map(_.getName).filter( _.indexOf("in")>=0)  

Странный массив Scala не имеет метода сортировки.

edit

Это закончится как.

"".getClass.getMethods.map(_.getName).toList.sort(_<_).filter(_.indexOf("index")>=0)
2
ответ дан OscarRyz 18 August 2018 в 22:36
поделиться
  • 1
    Да, но список – sblundy 22 May 2010 в 02:19
  • 2
    classOf [String] .getMethods.toList.map (_. getName) .sort (_ & lt; _) .filter (_.matches («index (. *)»)) Это то, что я получил – skyde 22 May 2010 в 02:21
  • 3
  • 4
    В нем говорится: предупреждение: были предупреждения об устаревании; повторно запустите с -deprecation для деталей и дайте мне пустой список – OscarRyz 22 May 2010 в 02:25
  • 5
    scala.Array неявно преобразованы в scala.collection.mutable.WrappedArray, который имеет методы sortBy и sortWith. См. Scaladocs: goo.gl/5pJD – missingfaktor 22 May 2010 в 02:25

Просто используя Java-код direct, вы получите большую часть пути, поскольку классы Scala все еще являются JVM. Вы также можете легко переносить код на Scala, но для удовольствия / практики / простоты использования в REPL.

0
ответ дан pdbartlett 18 August 2018 в 22:36
поделиться

Вы можете использовать приглашение scala REPL. Чтобы найти список методов-членов строкового объекта, например, введите «». и затем нажмите клавишу TAB (это пустая строка - или даже непустая, если хотите, затем точка, а затем нажмите TAB). REPL перечислит для вас все методы участников.

Это относится и к другим типам переменных.

6
ответ дан Saichovsky 18 August 2018 в 22:36
поделиться
  • 1
    хорошее простое решение для сеанса REPL. – Tony Cronin 24 January 2016 в 23:00
  • 2
    Именно это я и искал. Простой и элегантный. – Magnus 3 May 2016 в 10:08

Более или менее одинаково:

val names = classOf[String].getMethods.toSeq.
    filter(_.getName.toLowerCase().indexOf(“index”) != -1).
    map(_.getName).
    sort(((e1, e2) => (e1 compareTo e2) < 0))

Но все в одной строке.

Чтобы сделать его более читаемым,

val names = for(val method <- classOf[String].getMethods.toSeq
    if(method.getName.toLowerCase().indexOf("index") != -1))
    yield { method.getName }
val sorted = names.sort(((e1, e2) => (e1 compareTo e2) < 0))
4
ответ дан sblundy 18 August 2018 в 22:36
поделиться
2
ответ дан OscarRyz 7 September 2018 в 06:11
поделиться
2
ответ дан OscarRyz 30 October 2018 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: