我使用这个logcat在我的代码中出错:
java.lang.NoClassDefFoundError: android.util.ArrayMap
at it.dd.multiplayerit.MainActivity.<init>(MainActivity.java:88)
at it.dd.multiplayerit.SwipeMainFragment$SectionsPagerAdapter.getItem(SwipeMainFragment.java:200)
at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:97)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832)
at android.support.v4.view.ViewPager.populate(ViewPager.java:982)
at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
at android.view.View.measure(View.java:15284)
at com.jeremyfeinstein.slidingmenu.lib.CustomViewAbove.onMeasure(CustomViewAbove.java:456)
at android.view.View.measure(View.java:15284)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:665)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:447)
at android.view.View.measure(View.java:15284)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:15284)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:861)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:602)
at android.view.View.measure(View.java:15284)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2367)
at android.view.View.measure(View.java:15284)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1867)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1111)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1292)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1009)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4236)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
at android.view.Choreographer.doCallbacks(Choreographer.java:555)
at android.view.Choreographer.doFrame(Choreographer.java:525)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4872)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511) …Run Code Online (Sandbox Code Playgroud) 我有一些array-map我正在考虑的assoc价值观.在一定大小之后,返回的值是a PersistentHashMap而不是原始值PersistentArrayMap.我在几个网站上看到过这种行为.有没有办法强制插入订单甚至之后assoc?
我有一个单独的函数,它将获取一个ash-map和一个键向量,并array-map按此顺序返回一个"新鲜" 键,但这意味着对于每个assoc,我必须首先提取键,cons/conj新键到向量,然后创建一个新的数组映射.看似kludgey,即使写在一个单独的功能.
是否有一种更直接的语言支持方式来保持即使在大型(> 10,但<50)键阵列映射上的插入顺序?
如果它是相关的,我使用数组映射列表作为数据到一个incanter数据集,然后输出到excel.save-xls函数保持键/列的顺序.
谢谢
我非常喜欢使用数组映射从另一个对象数组创建对象数组的函数式编程风格.
$newObjects = array_map(
function($oldObject) {
return new NewObject($oldObject);
},
$oldObjects
);
Run Code Online (Sandbox Code Playgroud)
这一切都运行正常,但我真的希望能够设置数组的索引,使它们是原始对象的id,以便于从数组中搜索和检索,但我想不出如何做其他的那么不是优雅.
$newObjects = array();
foreach ($oldObjects as $oldObject) {
$newObjects[$oldObject->getId()] = new NewObject($oldObject);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以做到这一点?
我有一个对象数组,我想更新一些内容。我想我可以只映射对象,找到我正在寻找的匹配,然后更新它。
data = data.map(obj => {
return this.state.objToFind === obj.title;
}).map(obj, idx) => {
console.log("found " + obj.title); // reads found + undefined?
obj.menu = this.state.menu;
obj.title = this.state.title;
obj.content = this.state.content;
});
Run Code Online (Sandbox Code Playgroud)
然而,这是行不通的。我找到了该对象,但 obj.anything 未定义。我的 console.log 读取“发现未定义”。
当我测试时array_map()功能时。有一个很奇怪的现象。
正常大小的数组
$array = range(1, 100000);
echo memory_get_usage();
array_map(function($value) {}, $array);
echo memory_get_usage();
Run Code Online (Sandbox Code Playgroud)
结果
8649024
8649024
Run Code Online (Sandbox Code Playgroud)
很明显,内存大小是相等的。
但对于大数组
$array = range(1, 10000000);
echo memory_get_usage();
array_map(function($value) {}, $array);
echo memory_get_usage();
Run Code Online (Sandbox Code Playgroud)
结果
84319040
Run Code Online (Sandbox Code Playgroud)
致命错误:第 6 行 G:\phpStudy\WWW\testSpeed.php 中允许的内存大小 134217728 字节已耗尽(尝试分配 36 字节)
为什么?我到处都有搜索答案。但似乎很少有人有这个问题。如果有人可以帮助我吗?谢谢你!
我玩了一下 php 的 array_map 函数,并考虑将它与命名参数一起使用,因为参数顺序总是让我恼火。(这些函数没有做任何有用的事情。只是需要一些东西来测试。)
到目前为止一切顺利,这是按预期工作的:
$testArray = [
'a' => [],
'b' => [1, 2, 3],
];
$result = array_map(array: $testArray, callback: fn (array $arr) => count($arr) === 0 ? null : $arr);
Run Code Online (Sandbox Code Playgroud)
(即使我需要一段时间来弄清楚数组参数的名称,正如array1德国文档中所记录的那样。但这是一件事情,我一有时间就会研究它。)
但是后来我尝试使用更多参数调用该函数。
所以,我的第一次尝试:
array_map(array: $testArray, callback: fn (array $arr) => count($arr) === 0 ? null : $arr, []);
Run Code Online (Sandbox Code Playgroud)
致命错误:不能在命名参数后使用位置参数
我了解到我不能在命名参数之后传递位置参数。
然后反过来:
array_map([], array: $testArray, callback: fn (array $arr) => count($arr) === 0 ? null : $arr);
Run Code Online (Sandbox Code Playgroud)
致命错误:未捕获错误:命名参数 $callback 覆盖了之前的参数
好的。它将第一个参数作为第一个位置参数并且很困惑,因为我覆盖了它。
我开始谷歌搜索。好的,未知的命名参数被传递给可变参数。让我们试试看:
array_map(array: $testArray, callback: …Run Code Online (Sandbox Code Playgroud) 我有一个值数组,我想通过htmlspecialchars运行,但有一个这样的参数:
$param = htmlspecialchars($param, ENT_QUOTES);
Run Code Online (Sandbox Code Playgroud)
问题是,我有一个值数组,我想运行htmlspecialchars:
$array = array_map('htmlspecialchars', $array);
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法将ENT_QUOTES传递给array_map回调?
我总是可以使用我自己的使用htmlspecialchars的函数,但如果有办法这样做会很好.
在下面的答案之后,这是我的最终结果:
$array = array_map('htmlspecialchars', $array, array_fill(0, count($array), ENT_QUOTES));
Run Code Online (Sandbox Code Playgroud)
这只是用$ array所拥有的值填充一个数组,并且它充满了ENT_QUOTE.
有一个多维数组
$template=Array (
[0] => Array ( [id] => 352 [name] => a )
[1] => Array ( [id] => 438 [name] => b )
[2] => Array ( [id] => 351 [name] => c )
)
Run Code Online (Sandbox Code Playgroud)
和一个数组映射函数
function myfunction()
{
return "[selected]=>null";
}
print_r(array_map("myfunction",$template));
Run Code Online (Sandbox Code Playgroud)
这导致
Array (
[0] => [selected]=>null
[1] => [selected]=>null
[2] => [selected]=>null
)
Run Code Online (Sandbox Code Playgroud)
我如何映射数组来获得这个结果
Array (
[0] => Array ( [id] => 352 [name] => a [selected] => null)
[1] => Array ( [id] => …Run Code Online (Sandbox Code Playgroud) 抱歉标题含糊,我很难用一句话概括这个问题(我愿意接受建议或编辑)。
我有一个二维关联数组,每个键都有一个由 2 个数字组成的数组。
像这样:
Array
(
[one] => Array
(
[0] => 1
[1] => 2
)
[two] => Array
(
[0] => 1
[1] => 2
)
[three] => Array
(
[0] => 1
[1] => 2
)
)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以使用 array_map() 或 array_filter() 返回一个包含每个键和每个值数组中第一个数字的数组,如下所示:
Array
(
[one] => 1
[two] => 1
[three] => 1
)
Run Code Online (Sandbox Code Playgroud)
我不想通过使用循环或类似的东西创建一个新数组,我想作为函数的参数即时进行转换,如果你知道我的意思的话。
我可以编写自己的函数来实现此目的,但我有兴趣知道是否可以使用 array_map() 或 array_filter() 来完成。
我尝试使用 array_merge()、array_keys() 和 array_values() 的各种组合,但没有成功。
我预先感谢您提供的任何帮助。
我试图将问题归结为一个尽可能简单的例子:
我们有一个子组件列表,每个子组件都称为NumChoice,每个子组件代表一个数字。NumChoice被包裹在React.memo. 在父组件中,我们有一个布尔数组choices,每个对应一个子组件NumChoice。首先, 的所有元素choices都是false。为了渲染子组件,我们遍历choices,并为每个选择生成相应的子组件NumChoice。我们chooseDivisibles在父组件中定义一个函数,使用useCallback它从每个子组件调用NumChoice。chooseDivisibles获取NumChoice调用它的人的索引并将其对应的元素更改choices为true。每个都是,否则,它的背景颜色是“白色”。NumChoice有一个“红色”的背景色,如果在其对应的元件choicestrue
完整代码可在:https : //codesandbox.io/s/react-rerender-l4e3c?fontsize=14&hidenavigation=1&theme=dark
包装NumChoiceinReact.memo和chooseDivisiblesin useCallback,我们希望只重新渲染NumChoice其相应元素发生choices变化的组件,但 React 会重新渲染它们。chooseDivisibles包含在 中useCallback,除了setChoices. 此外,NumChoice被包裹,React.memo并且只有在指定的道具改变时才应该重新渲染,但它们不会,并且改变choices不应该对重新渲染产生任何影响NumChoice。如果我们排除检查chooseDivisibles前一个和下一个 props的相等性,它会按预期工作,但我认为前一个和下一个的比较chooseDivisibles不应该影响重新渲染, …
array-map ×10
php ×6
arrays ×5
reactjs ×2
android ×1
array-filter ×1
clojure ×1
hashmap ×1
iterator ×1
java ×1
javascript ×1
json ×1
php-8 ×1
react-memo ×1
rerender ×1
usecallback ×1