解決した問題を投稿して、より美しい解決策を求めても問題ないことを願っています。
ProcessID にマップされたすべてのプロセス名のリストが必要でした。"notepad.exe" -> 4242
Ofc のようなものは複数のインスタンスがある可能性があるため、次のようにする必要があります"notepad.exe" -> List(4242,7171)
タプルを提供するメソッドがあります
private def extractProcess(s: String): (String, Int) = {
val process = s.split(" ").filterNot(str => str == "")
(process(0), process(1).toInt)
}
出力は("Notepad.exe",4242)
processListには、次のようなWindowsタスクリストからの生の文字列が含まれていました
svchost.exe 4464 Services 0 47.656 K
今、すべてのプロセスでマップを作成したいのですが、このようにしました
val process: Map[String, List[Int]] = Map()
processList.drop(5).map(s => {
val element = extractProcess(s)
if (process contains element._1) {
val p = process get element._1
process(element._1) = p.get ::: List(element._2)
} else {
process(element._1) = List(element._2)
}
})
最初の 5 つの要素は不要なので削除しました
出力は次のようになります
...
(tasklist.exe,List(5036))
(NLClientApp.exe,List(2812))
(wininit.exe,List(444))
(SearchFilterHost.exe,List(5476))
(svchost.exe,List(656, 732, 928, 964, 992, 1036, 1140, 1360, 2168, 4464, 4764, 5048))
...
それが私がやりたかったことです。マップを作成するより良い方法はありますか?
私は常に機能よりも命令を考えています。違うことを考えるのは難しいです。