foreach ($MainArray as $value) {
$name = $value['Machine_Name'];
unset($value['Machine_Name']);
$ConvertedArray[$name][] = $value;
}
Любопытно, что никто не попробовал более прямой перевод:
""
.getClass.getMethods.map(_.getName) // methods
.sorted // sort
.filter(_ matches "(?i).*index.*") // grep /index/i
Итак, некоторые случайные мысли.
sorted
выше: на самом деле он принимает неявный параметр типа Ordering
. Если бы я хотел сортировать сами методы, а не их имена, я должен был бы предоставить его. 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")
Это до тех пор, пока я не получил:
"".getClass.getMethods.map(_.getName).filter( _.indexOf("in")>=0)
Странный массив Scala не имеет метода сортировки.
edit
Это закончится как.
"".getClass.getMethods.map(_.getName).toList.sort(_<_).filter(_.indexOf("index")>=0)
scala.Array
неявно преобразованы в scala.collection.mutable.WrappedArray
, который имеет методы sortBy
и sortWith
. См. Scaladocs: goo.gl/5pJD
– missingfaktor
22 May 2010 в 02:25
Просто используя Java-код direct, вы получите большую часть пути, поскольку классы Scala все еще являются JVM. Вы также можете легко переносить код на Scala, но для удовольствия / практики / простоты использования в REPL.
Вы можете использовать приглашение scala REPL. Чтобы найти список методов-членов строкового объекта, например, введите «». и затем нажмите клавишу TAB (это пустая строка - или даже непустая, если хотите, затем точка, а затем нажмите TAB). REPL перечислит для вас все методы участников.
Это относится и к другим типам переменных.
Более или менее одинаково:
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))
sort
, но не во всех сборниках. – Daniel C. Sobral 22 May 2010 в 03:31x.methods
включены методы, доступные через mixins, тогда какx.getClass.getMethods
не находится в Scala. Попробуйте1.methods
в Ruby, а затем попробуйте1.getClass.getMethods
в Scala. – Rich 20 January 2014 в 20:02